#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int l, n;
int a[10];
int main()
{   
    cin >> l >> n;
    int t = pow(26, l) - n;
    // zdl:: 装换一下思路，其实就是26进制的数字转换

    for (int i = 0; i < l; i++)
    {
        a[i] = t % 26;
        t /= 26;
    }
    for (int i = l - 1; i >= 0; i--)
    {
        printf("%c", 'a' + a[i]);
    }
    return 0;
}


// #include<stdio.h>
// #include<math.h>
// int main(){	
// 	int l,n,t;
// 	scanf("%d%d",&l,&n);
// 	int xx[10],i;
// 	t = pow(26,l)-n;                //pow(a,b)是标准库里一个数学函数，求的是a的b次方，头文件为 #include<math.h> 
// 	for(i=0;i<l;i++){     
// 		xx[i]=t%26; 	        	//用创建的数组保存第 i 个位置上对26取得的余数； 
// 		t/=26;
// 	}
// 	for(i=l-1;i>=0;i--)
// 		printf("%c",'a'+xx[i]);     //a 的ASCII码加上余数，就得到对应字母的ASCII码，不懂的可以取了解一下ASCII 
//     return 0;
// }